home *** CD-ROM | disk | FTP | other *** search
- /*
- File: BrowserMaker.c
-
- Written by: Peter Hoddie
-
- Copyright: © 1992-1994 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
- <1> 12/8/94 khs changed the format of the file to the new look and feel
-
-
- */
-
-
- // INCLUDES
- #include <Aliases.h>
- #include <Files.h>
- #include <Movies.h>
- #include <QDOffscreen.h>
- #include <Resources.h>
- #include <Fonts.h>
-
- #define PosterWidth 80
- #define PosterHeight 60
-
-
- // FUNCTIONS
- void main(void)
- {
- StandardFileReply srcReply;
- SFReply dstReply;
- FSSpec newDoc;
- OSType movieType = 'MooV';
- Point where = {50, 50};
- short dstResRef;
- short fileIndex = 1;
- Rect totalRect = {0,0,0,0};
- Rect posterRect = {0,0,PosterHeight,PosterWidth};
- GWorldPtr posterGW;
- Handle rectH;
- char zero = 0;
- short resID = 128;
-
- // initialize the world
- InitGraf(&qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(0L);
- InitCursor();
- MaxApplZone();
- EnterMovies();
-
- StandardGetFilePreview(nil, 1, &movieType, &srcReply);
- if (!srcReply.sfGood) return;
-
- SFPutFile(where, "\pCreate Page Doc:", "\pNewPageDoc", nil, &dstReply);
- if (!dstReply.good) return;
-
- FSMakeFSSpec(dstReply.vRefNum, 0, dstReply.fName, &newDoc);
- FSpDelete(&newDoc);
- FSpCreateResFile(&newDoc, 'aNdY', 'Dalí', -2);
- dstResRef = FSpOpenResFile(&newDoc, fsRdWrPerm);
- if (ResError()) return;
-
- // make a gworld for creating posters
- if (NewGWorld(&posterGW, 16, &posterRect, 0, 0, 0) != noErr) return;
- SetGWorld(posterGW, 0);
-
- do {
- OSErr err;
- HFileParam pb;
- FSSpec movieFile;
- Str255 name;
- short movieRes;
-
- pb.ioVRefNum = srcReply.sfFile.vRefNum;
- pb.ioFDirIndex = fileIndex++;
- pb.ioDirID = srcReply.sfFile.parID;
- pb.ioNamePtr = name;
- err = PBHGetFInfoSync((HParmBlkPtr)&pb);
- if (err) break;
-
- if (pb.ioFlFndrInfo.fdType != 'MooV') continue;
-
- FSMakeFSSpec(srcReply.sfFile.vRefNum, srcReply.sfFile.parID, name, &movieFile);
- if (OpenMovieFile(&movieFile, &movieRes, fsRdPerm) == noErr) {
- Movie newMovie;
-
- err = NewMovieFromFile(&newMovie, movieRes, nil, nil,
- 0, nil);
- CloseMovieFile(movieRes);
- if (!err) {
- Rect movieBox;
- AliasHandle newAlias = 0;
- PicHandle newPict;
- PicHandle poster;
-
- // accumlate the bounds
- GetMovieBox(newMovie, &movieBox);
- OffsetRect(&movieBox, -movieBox.left, -movieBox.top);
- if (EmptyRect(&totalRect))
- totalRect = movieBox;
- else
- UnionRect(&movieBox, &totalRect, &totalRect);
-
- // add the alias
- NewAlias(&newDoc, &movieFile, &newAlias);
- AddResource((Handle)newAlias, rAliasType, resID, movieFile.name);
- WriteResource((Handle)newAlias);
- ReleaseResource((Handle)newAlias);
-
- // add the poster
- poster = GetMoviePosterPict(newMovie);
- EraseRect(&posterRect);
- DrawPicture(poster, &posterRect);
- KillPicture(poster);
- newPict = OpenPicture(&posterRect);
- CopyBits((BitMap *)*posterGW->portPixMap, (BitMap *)*posterGW->portPixMap,
- &posterRect, &posterRect, ditherCopy, nil);
- ClosePicture();
- AddResource((Handle)newPict, 'PICT', resID++, (StringPtr)&zero);
- WriteResource((Handle)newPict);
- ReleaseResource((Handle)newPict);
-
- DisposeMovie(newMovie);
- }
- }
-
-
- } while (true);
-
- // add the bounds rect
- InsetRect(&totalRect, -50, -25);
- PtrToHand((Ptr)&totalRect, &rectH, sizeof(totalRect));
- AddResource((Handle)rectH, 'RECT', 128, (StringPtr)&zero);
- WriteResource((Handle)rectH);
- ReleaseResource((Handle)rectH);
-
- CloseResFile(dstResRef);
- }
-